package controller;

import java.util.ArrayList;
import java.util.List;

import model.Lote;
import beans.LoteBean;
import dao.HibernateLoteDAO;
import dto.LoteDTO;

public class AdministradorLote {
	private static AdministradorLote instancia;

	private AdministradorLote() {

	}

	public static AdministradorLote getInstancia() {
		if (instancia == null)
			instancia = new AdministradorLote();
		return instancia;
	}

	public LoteBean fromModelTOBean(Lote lote) {
		LoteBean loteBean = null;
		if (lote != null) {
			loteBean = new LoteBean();
			loteBean.setIdLote(lote.getId());
			loteBean.setCodigo(lote.getCodigo());
			loteBean.setEstado(lote.isEstado());
			loteBean.setProducto(AdministradorProducto.getInstancia()
					.fromModelTOBean(lote.getProducto()));
			loteBean.setVencimiento(lote.getVencimiento());
		}
		return loteBean;
	}

	public Lote fromDTOTOModel(LoteDTO loteDTO) {
		Lote lote = null;
		if (loteDTO != null) {
			lote = new Lote();
			lote.setId(loteDTO.getId());
			lote.setCodigo(loteDTO.getCodigo());
			lote.setEstado(loteDTO.isEstado());
			lote.setProducto(AdministradorProducto.getInstancia()
					.fromDTOTOModel(loteDTO.getProducto()));
			lote.setVencimiento(loteDTO.getVencimiento());
		}
		return lote;
	}

	public LoteDTO fromModelTODTO(Lote lote) {
		LoteDTO loteDTO = null;
		if (lote != null) {
			loteDTO = new LoteDTO();
			loteDTO.setId(lote.getId());
			loteDTO.setCodigo(lote.getCodigo());
			loteDTO.setEstado(lote.isEstado());
			loteDTO.setProducto(AdministradorProducto.getInstancia()
					.fromModelTODTO(lote.getProducto()));
			loteDTO.setVencimiento(lote.getVencimiento());
		}
		return loteDTO;
	}

	public Lote fromBeanTOModel(LoteBean loteBean) {
		Lote lote = null;
		if (loteBean != null) {
			lote = new Lote();
			lote.setId(loteBean.getIdLote());
			lote.setCodigo(loteBean.getCodigo());
			lote.setEstado(loteBean.isEstado());
			lote.setProducto(AdministradorProducto.getInstancia()
					.fromBeanTOModel(loteBean.getProducto()));
			lote.setVencimiento(loteBean.getVencimiento());
		}
		return lote;
	}

	public Lote buscarLote(Lote lote) {
		LoteBean ab = fromModelTOBean(lote);
		ab = HibernateLoteDAO.getInstancia().buscarLote(ab);
		return fromBeanTOModel(ab);
	}

	public void update(Lote lote) {
		LoteBean ab = fromModelTOBean(lote);
		HibernateLoteDAO.getInstancia().update(ab);
	}
	
	public Lote buscarUltimoLote() {
		List<LoteBean> ltbs = HibernateLoteDAO.getInstancia()
				.buscarUltimoLote();
		List<Lote> ltList = fromBeanTOModel(ltbs);
		if (ltList != null) {
			return ltList.get(ltList.size() - 1);
		} else {
			return null;
		}
	}

	public List<Lote> fromBeanTOModel(List<LoteBean> stockBeans) {
		List<Lote> loteModel = new ArrayList<Lote>();
		for (LoteBean LoteBean : stockBeans) {
			Lote Lote = this.fromBeanTOModel(LoteBean);
			loteModel.add(Lote);
		}
		return loteModel;
	}

}
